// 拦截器
import axios from "axios";
import store from "@/store";
import { Message } from "element-ui";
import router from "@/router";
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 写这个 基地址,使用process.env NODE.js的全局变量
  timeout: 10000, // 超时
}); // 创建一个新的axios 实例
// service 执行两个函数，1成功 2 失败 请求拦截器，我请求它  当作返回一个promise,因为可能会与异常
service.interceptors.request.use(
  (config) => {
    // 返回之前 统一注入 token 到请求头
    var token = store.getters.token;
    if (token) {
      // 有 token
      config.headers.Authorization = `Bearer ${token}`;
    }
    console.log(config.headers.Authorization);

    return config;
  },
  (error) => {
    // 失败执行promise,终止执行
    return Promise.reject(error);
  }
);

// 响应拦截器，主要是处理接口返回的信息
service.interceptors.response.use(
  (response) => {
    const { data, success, message } = response.data; // 直接获得返回数据集
    if (success) {
      return data;
    } else {
      // 使用Message 输出信息 ,页面显示
      Message({ type: "error", message: message });
      return Promise.reject(new Error(message));
    }
  },
  (error) => {
    if (error.response.status === 401) {
      Message({ type: "warning", message: 'token超时,请重新登录' });
      // token 过期
      store.dispatch('user/logout') // 调用action 退出，并清除缓存
      // 主动跳转登录页
      router.push('/login')// 跳转登录页
    }
    // Message({ type: "error", message: error.message });
    return Promise.reject(error);
  }
);

export default service; // 别的地方就可以使用了
